字符串相乘

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

示例 1:

1
2
输入: num1 = "2", num2 = "3"
输出: "6"

示例 2:

1
2
输入: num1 = "123", num2 = "456"
输出: "56088"

说明:

1.num1 和 num2 的长度小于110。
2.num1 和 num2 只包含数字 0-9。
3.num1 和 num2 均不以零开头,除非是数字 0 本身。
4.不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
class Solution {
public String multiply(String num1, String num2) {
if(num1==null||num2==null)return "";
int l1=num1.length();
int l2=num2.length();
if(l1==0||l2==0)return "";
int[] ls=new int[l1+l2];
for(int i=l1-1;i>=0;i--)
{
int x1=num1.charAt(i)-'0';
for(int j=l2-1;j>=0;j--)
{
int x2=num2.charAt(j)-'0';
ls[i+j+1]+=x1*x2;
//System.out.println("第"+i+j+"格子放"+x1*x2);
}
}
StringBuffer sb=new StringBuffer();
for(int i=l1+l2-1;i>=0;i--)
{
int x=ls[i]%10;
int c=ls[i]/10;
if(c!=0)
ls[i-1]+=c;
sb.append(x);
}
sb.reverse();
int begin = 0;
for(;;begin++)
{
if(begin==sb.length())return "0";
if(sb.charAt(begin)!='0')break;
}
return sb.substring(begin);
}
}